package xx.services.page.rest;

import java.sql.SQLException;

import javax.servlet.http.HttpServletRequest;
import javax.sql.RowSet;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;

import xx.entity.page.PageLayout;
import xx.services.Passport;
import xx.services.page.inter.ILayoutInterface;
import xx.services.util.Constants;
import xx.util.string.Format;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

/**
 * page页面布局管理服务接口
 * 
 * @Path (Constants.RESTFUL_ROOT_PATH + "/page/layout")
 * @author Administrator 2010-12-21
 */
@Path(Constants.RESTFUL_ROOT_PATH + "/page/layout")
public class LayoutRest extends Passport implements ILayoutInterface
{

    public LayoutRest(@Context
    HttpServletRequest request)
    {
        super(request);
        // TODO Auto-generated constructor stub
    }

    /**
     * 描述：删除布局demo。<br>
     * 
     * @DELETE
     * @Path ("/{layout_id}")
     * @param layoutId-@PathParam("layout_id")
     *            布局ID，多个布局ID用“_”隔开
     * @return true-删除成功，string-其他删除失败（string就是失败原因）
     * @author chenxiang
     */
    @DELETE
    @Path("/{layout_id}")
    public String delete(@PathParam("layout_id")
    String layoutId)
    {
        return null;
        //此功能已经分别移到PageRest中
//        try
//        {
//            PageLayout pl = new PageLayout(qr, owner);
//
//            if (Format.isEmpty(layoutId))
//                return null;
//
//            int count = 0;
//            long[] layoutIdArr = Arr.toLongArray(layoutId, "_");
//            for (long id : layoutIdArr)
//            {
//                pl.setLayoutId(id);
//                pl.delete();
//                count++;
//            }
//            return ok(count);
//        }
//        catch (SQLException e)
//        {
//            return error(e);
//        }
    }

    /**
     * 描述：获取一个布局demo，包含Item<br>
     * 
     * @GET
     * @Path ("/{layout_id}")
     * @param layoutId-@PathParam("layout_id")
     *            布局ID
     * @return 布局实体，包含Item
     * @author chenxiang
     */
    @GET
    @Path("/{layout_id}")
    public String get(@PathParam("layout_id")
    long layoutId)
    {
        try
        {
            PageLayout pl = new PageLayout(qr, owner);
            pl.setLayoutId(layoutId).load();
            return ok(pl);
        }
        catch (SQLException e)
        {
            return error(e);
        }
    }

    /**
     * 获取一个布局html代码，包含Item<br>
     * 
     * @GET
     * @Path ("/{layout_id}/html")
     * @param layoutId-@PathParam("layout_id")
     *            布局ID
     * @return 布局Html代码，不是json数据
     * @author chenxiang
     */
    @GET
    @Path("/{layout_id}/html")
    public String getHtml(@PathParam("layout_id")
    long layoutId)
    {
        try
        {
            PageLayout pl = new PageLayout(qr, owner);
            return ok(pl.setLayoutId(layoutId).toHtml(), HTML);
        }
        catch (SQLException e)
        {
            return error(e);
        }
    }

    /**
     * 修改一个布局demo。<br>
     * 
     * @PUT
     * @Path ("/{layout_id}")
     * @param layoutId-@PathParam("layout_id")
     *            布局ID
     * @param layout-@FormParam("layout")
     *            布局demo的Json字符串
     * @return 新的布局实体
     * @author chenxiang
     */
    @PUT
    @Path("/{layout_id}")
    public String update(@PathParam("layout_id")
    long layoutId, @FormParam("layout")
    String layout, @FormParam("title")
    String title, @FormParam("container")
    String container, @FormParam("demo")
    String demo, @FormParam("description")
    String description)
    {
        try
        {
            if (Format.isEmpty(layout))
            {
                PageLayout pl = new PageLayout(qr, owner);
                pl.setLayoutId(layoutId).setTitle(title).setContainer(container).setDemo(demo).setDescription(
                        description).update();
                return ok(pl);
            }
            else
            {
                JsonParser parser = new JsonParser();
                JsonObject jo = parser.parse(layout).getAsJsonObject();
                PageLayout pl = new PageLayout(qr, owner);
                pl.setLayoutId(layoutId);
                pl.update(jo);
                return ok(pl);
            }
        }
        catch (Exception e)
        {
            return error(e);
        }
    }

    @GET
    @Path("/{layout_id}/item")
    public String getItem(@PathParam("layout_id")
    long layoutId)
    {
        try
        {
            PageLayout pl = new PageLayout(qr, owner);
            RowSet rs = pl.setLayoutId(layoutId).getItem();
            return ok(rs);
        }
        catch (SQLException e)
        {
            return error(e);
        }
    }
}
